clc
clear all
close all
T1=0.01;
B=30e3;%LFM的带宽
fs=600e3;
fs2=B;
fmid=100e3;
T2=0.5;
Ts=1/fs;
k=B/T1;
fl=fmid-B/2;
fh=fmid+B/2;

t1=(0:Ts:T1-Ts)-T1/2;
f1=(0:1/T1:fs-1/T1)-fs/2;
f2=(0:1/T2:fs-1/T2)-fs/2;
x_LFM=(cos(2*pi*(fmid*t1+1/2*k*t1.^2)));
Tar=zeros(size(f2));
Tar(find(f2==fl):find(f2==fh))=...%cos((find(f2==fl):find(f2==fh)))+1i./((find(f2==fl):find(f2==fh)));
                        rand(size(find(f2==fl):find(f2==fh)));
Tar(find(f2==-fh):find(f2==-fl))=conj(fliplr(Tar(find(f2==fl):find(f2==fh))));
tar=real(fftshift(ifft(fftshift(Tar))));
% plot(f2,abs(Tar))
Y_LFM1=fftshift(fft(fftshift(x_LFM)));
Y_LFM2=fftshift(fft(fftshift(x_LFM),length(Tar)));
figure
subplot(211)
plot(f1,abs(Y_LFM1))
subplot(212)
plot(f2,abs(Y_LFM2))

sig=conv(tar,(x_LFM));
% figure
% subplot(211)
% plot(sig)
% %采样率一样的两个信号，完全可以在时域卷积，但是由于时长不一致，他们在频域怎么做呢
% subplot(212)
% sig2=(fftshift(ifft(fftshift(Y_LFM2.*Tar),length(sig))));
% plot(sig2)
% plot(real(sig2))
% hold on
% plot(imag(sig2))
sig=sig(1:length(t1));
T=length(sig)/fs;
[P_IQ,Y_IQ]=NKST2IQ(sig,fs,fs2,fmid,B,T);
function [P_IQ,Y_IQ]=NKST2IQ(conv_LFM_tar,fs,fs2,fmid,B,T)
f1=fmid-B/2;
fh=fmid+B/2;
Ts=1/fs;
t=(0:Ts:T-Ts)-T/2;
f=(0:1/T:fs-1/T)-fs/2;
t2=(0:1/fs2:T-1/fs2)-T/2;
f2=(0:1/T:fs2-1/T)-fs2/2;
Conv_LFM_Tar=fftshift(fft(fftshift(conv_LFM_tar)));
conv_LFM_tar2=hilbert(conv_LFM_tar);%这行需要注意，仍然是对实际接收到的实信号做Hilbert变换
subplot(211)
plot(f,abs(Conv_LFM_Tar))
xlabel('频率/Hz');ylabel('幅度');title('LFM-目标特性耦合后的频域信号')
xlim([85e3,115e3])
fs2=B;%实际上往往取fs2=B*1.1~1.2
%----------降采样 把LFM信号抽样----------

multi=(fs/fs2);
if mod(multi,1)==0
p1=conv_LFM_tar2(1:multi:end);%原始LFM信号降采样后结果
t2=t(1:multi:end);
N_2=length(t2)
f2=(0:N_2-1)/N_2*fs2-fs2/2;
else 
    disp('降采样不是整数倍！')%不建议非整数倍情况
end
N_iq=length(p1);
omega=((2*pi*fmid*t2));
P_IQ=p1.*(cos(omega)-1i*sin(+omega));%去掉基频的影响，相当于把信号搬运到低频。
Y_IQ=fftshift(fft(fftshift(P_IQ)));
%------------观察一下，原始信号和IQ采样后的频响是否一致---------
subplot(212)
plot(f2,abs(Y_IQ)./(max(abs(Y_IQ))))
xlabel('频率/Hz');ylabel('幅度');title('IQ采样恢复得到的频域信号')
xlim([-B/2,B/2])
Conv_LFM_Tar2=Conv_LFM_Tar(find(f==-B/2+fmid):find(f==B/2+fmid));
corrcoef(Y_IQ,Conv_LFM_Tar2(1:end-1))
end